import pygame as pg

pg.init()

pg.display.set_mode((800, 600))

# 设置音乐播放完成后，触发的事件
# 自定义事件
MUSIC_END = pg.USEREVENT + 1
# 把这个事件注册到pygame
pg.mixer.music.set_endevent(MUSIC_END)

# 加载音乐
pg.mixer.music.load('pygame教程\Resource\music\SWIN-S - 只因你太美.ogg')

# 播放音乐
# 参数说明：
# loops: 控制音乐循环次数。0表示播放一次（不循环），-1表示无限循环，正整数表示循环次数。
# start: 从音乐的哪个位置开始播放，只影响第一次循环的起始位置（以秒为单位）。
# fade_ms：以淡入效果开始播放音乐，即音乐从静音逐渐过渡到正常音量。（以毫秒为单位）
pg.mixer.music.play(1, 210, 5000)  # 播放一次，从音乐的第210秒处开始播放，音乐会在5000毫秒的时间内从静音逐渐增加到正常音量。

isRunning = True
while isRunning:
    for ev in pg.event.get():
        if ev.type == pg.QUIT:
            isRunning = False
            break
        elif ev.type == MUSIC_END:
            print('music end')
        elif ev.type == pg.KEYDOWN:
            # 空格控制播放、暂停音乐
            if ev.key == pg.K_SPACE:
                if pg.mixer.music.get_busy():
                    # 暂停播放
                    pg.mixer.music.pause()
                else:
                    # 恢复播放
                    pg.mixer.music.unpause()
            # 按s停止播放
            elif ev.key == pg.K_s:
                pg.mixer.music.stop()
            # 按r从头开始播放
            elif ev.key == pg.K_r:
                pg.mixer.music.rewind()
            # 调大音量
            elif ev.key == pg.K_UP:
                # 获取当前音量[0, 1]
                volume = pg.mixer.music.get_volume()
                # ++
                pg.mixer.music.set_volume(volume + 0.05)
            # 调小音量
            elif ev.key == pg.K_DOWN:
                 # 获取当前音量[0, 1]
                volume = pg.mixer.music.get_volume()
                # --
                pg.mixer.music.set_volume(volume - 0.05)

pg.quit()